package Array;

/**
 * 80:删除有序数组的重复项
 * 给你一个有序数组 nums ，请你 原地 删除重复出现的元素，使得出现次数超过两次的元素只出现两次 ，返回删除后数组的新长度。
 * 不要使用额外的数组空间，你必须在 原地 修改输入数组 并在使用 O(1) 额外空间的条件下完成。

  解题思路： 要原地删除，而且不能使用额外的空间，那么就只能使用指针思路了， 遍历数组，如果当前元素与前i-2的元素相等，则删除当前元素，直到找到不同的元素为止。
 这道题不用想太多，不用关注删除元素后如何移动数组，只需要统计出数组最后的大小即可。
  解题步骤：
    1 ：数组的大小肯定大于2，否则直接返回数组大小
    2 ：使用指针思路 ， 定义slow，fast快慢指针，初始值均是2， slow指向数组中需要保留的元素，fast用来遍历数组并判断当前元素是否需要保留
    3 : while(fast < nums.length)
        如果当前元素与slow-2相等，则fast++，slow不变，表示当前元素不需要保留
        反过来说， 如果当前元素与slow-2不相等，则更新slow的元素值，更新为当前元素fast，然后 slow++,fast++
        稍微做一下优化，if(num-fast != nums-slow-2),则更新slow的元素值，并slow++， 然后 fast++
    4： 编写代码，返回slow
 */
public class RemoveDuplicates {
    public int removeDuplicates(int[] nums) {
        if(nums == null || nums.length <= 2){
            return nums.length;
        }
        int slow = 2;
        int fast = 2;
        while (fast < nums.length){
            if(nums[fast] != nums[slow-2]){
                nums[slow] = nums[fast];
                slow++;
            }
            fast++;
        }
        return slow;
    }
}
